package ext.trace.geom;

import ext.trace.scene.Hit;
import image.Image3;
import math.rand.RNG;
import math.vec3;

public abstract class BRDF
{
    
    public Image3 rAlbedo;
    
    
    public BRDF()
    {
        this.rAlbedo = null;
    }
    
    
    public abstract BRDF copy();
    
    
    public abstract vec3 sample(
        Hit aHit, 
        vec3 aIncoming, 
        vec3 aOutgoing
    );
    
    public abstract vec3 randOutgoing(
        RNG aRNG, 
        vec3 aNormal
    );
    
    public abstract double probOfRandOutgoing(
        vec3 aNormal, 
        vec3 aRandOutgoing
    );
    
}
